home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 23 / AMIGAplus Sonderheft 23 (2000)(Falke)(DE)[!].iso / Updates / HD-Installer / -WHDLoad- / WHDLoad_dev / Src / slave-examples / turrican.asm < prev    next >
Assembly Source File  |  1999-11-08  |  15KB  |  706 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    turrican.asm
  3. ;  :Contents.    Slave for "Turrican"
  4. ;        supports orginal "Rainbow Arts", "Innerprise" and
  5. ;        "AmigaFun" rerelease
  6. ;  :Author.    Wepl
  7. ;  :Version.    $Id: turrican.asm 1.2 1998/06/27 23:50:34 jah Exp jah $
  8. ;  :History.    31.03.97 initial
  9. ;        22.04.97 new 60000 and bb -> changes
  10. ;        28.04.97 copper preserved (install-waitpic)
  11. ;        05.05.97 rework files instead image, lots more
  12. ;        13.05.97 file "30" forgotten, delay on intro voice added
  13. ;        24.05.97 highscore saving fixed
  14. ;        25.05.97 cache enabled
  15. ;             to version 4 evaluated (kinit removed)
  16. ;        27.05.97 blitter patches
  17. ;        24.06.97 keyboard routine fixed
  18. ;        22.07.97 copylock level 1,2,4,5 removed
  19. ;        24.07.97 voice wait improved
  20. ;             blitter waits reworked and completed
  21. ;        29.07.97 random generator replaced because Access Fault's
  22. ;        31.07.97 support for second version started
  23. ;        01.08.97 extro fixed
  24. ;        09.08.97 keyboard stuff in install changed
  25. ;             support for innerprise version completed
  26. ;             blitwaits on endboss added
  27. ;        15.08.97 sp changed for install because crash with v2
  28. ;        17.08.97 basememsize for install increased from 7f000 -> 82000
  29. ;        20.08.97 level4 protection adapted for innerprise version
  30. ;        30.08.97 keyboard external
  31. ;        15.09.97 support for "AmigaFun" rerelease
  32. ;        27.06.98 cleanup for source code release
  33. ;  :Requires.    -
  34. ;  :Copyright.    Public Domain
  35. ;  :Language.    68000 Assembler
  36. ;  :Translator.    Barfly V1.131
  37. ;  :To Do.
  38. ;---------------------------------------------------------------------------*
  39.  
  40. ;install        ;if this label is set the install Slave will be created
  41.  
  42.     INCDIR    Includes:
  43.     INCLUDE    whdload.i
  44.  
  45.     IFD    BARFLY
  46.     IFND install
  47.     OUTPUT    wart:turrican/turrican.slave
  48.     ELSE
  49.     OUTPUT    wart:turrican/install.slave
  50.     ENDC
  51.     BOPT    O+ OG+                ;enable optimizing
  52.     BOPT    ODd- ODe-            ;disable mul optimizing
  53.     BOPT    w4-                ;disable 64k warnings
  54.     SUPER                    ;disable supervisor warnings
  55.     ENDC
  56.  
  57. ;======================================================================
  58.  
  59. .base        SLAVE_HEADER        ;ws_Security + ws_ID
  60.         dc.w    4        ;ws_Version
  61.         dc.w    WHDLF_NoError    ;ws_Flags
  62.         dc.l    $82000        ;ws_BaseMemSize
  63.         dc.l    $100        ;ws_ExecInstall
  64.         dc.w    _Start-.base    ;ws_GameLoader
  65.         dc.w    _dir-.base    ;ws_CurrentDir
  66.         dc.w    0        ;ws_DontCache
  67. _keydebug    dc.b    0        ;ws_keydebug
  68.     IFD install
  69. _keyexit    dc.b    $45        ;ws_keyexit = ESC
  70.     ELSE
  71. _keyexit    dc.b    $59        ;ws_keyexit = F10
  72.     ENDC
  73. _dir        dc.b    "data",0
  74.  
  75. ;======================================================================
  76.  
  77.     IFD    BARFLY
  78.     IFND    install
  79.         dc.b    "$VER: Turrican.Slave by Wepl "
  80.     ELSE
  81.         dc.b    "$VER: Turrican Install.Slave by Wepl "
  82.     ENDC
  83.     DOSCMD    "WDate >T:date"
  84.     INCBIN    "T:date"
  85.         dc.b    0
  86.     ENDC
  87.     EVEN
  88.  
  89. ;======================================================================
  90. _Start    ;    A0 = resident loader
  91. ;======================================================================
  92.  
  93.         lea    (_resload,pc),a1
  94.         move.l    a0,(a1)
  95.         
  96. ;======================================================================
  97.  
  98.     IFD install
  99.         
  100. ;======================================================================
  101.  
  102.     ;install keyboard quitter
  103.         bsr    _SetupKeyboard
  104.  
  105.     ;magic screen
  106.         lea    _disk1,a0
  107.         lea    $50000,a1
  108.         bsr    _Picture
  109.             waitbutton
  110.         lea    _wait,a0
  111.         lea    $50000,a1
  112.         bsr    _Picture
  113.  
  114.     ;load the loader
  115.         MOVE.L    #$00060000,a0        ;adr
  116.         MOVE.L    #$00017e00,d1        ;size
  117.         MOVE.L    #$00000400,d0        ;offset
  118.         sub.l    a1,a1            ;taglist
  119.         movem.l    d1/a0,-(a7)
  120.         move.l    (_resload),a3
  121.         jsr    (resload_DiskLoadDev,a3)
  122.     ;save the loader
  123.         movem.l    (a7),d0/a1
  124.         lea    (_60000),a0
  125.         jsr    (resload_SaveFile,a3)
  126.     ;    jsr    (resload_LoadFile,a3)
  127.     ;check version
  128.         movem.l    (a7)+,d0/a0
  129.         jsr    (resload_CRC16,a3)
  130.         cmp.w    #$5346,d0
  131.         beq    _version_1
  132.         cmp.w    #$59fe,d0
  133.         beq    _version_2
  134.         bra    _badver
  135.         
  136. _version_1    skip    $17a-$16e,$6016e    ;preserve copperlist
  137.         JSR    $0006010C.L        ;A6 = _custom !!!
  138.         move.w    #INTF_SETCLR|INTF_INTEN|INTF_PORTS,(intena,a6)
  139.  
  140.     ;load all files from disk and save them
  141.                         ;A6 = $dff000
  142.         lea    (.files),a4        ;A4 file table
  143.         move.l    #$1000,a5        ;A5 address
  144.  
  145. .loop        movem.l    (a4),d0/d1        ;starttrack + size
  146.         move.l    a5,d2            ;address
  147.         movem.l    d5-d7/a4-a5,-(a7)
  148.         jsr    $6057a            ;loader
  149.         movem.l    (a7)+,d5-d7/a4-a5
  150.         
  151.         movem.l    (a4)+,d0/d2
  152.         bsr    _LongToStr        ;a0 = name
  153.         move.l    d2,d0            ;size
  154.         move.l    a5,a1            ;address
  155.         move.l    (_resload),a2
  156.         jsr    (resload_SaveFile,a2)
  157.         
  158.         tst.l    (a4)
  159.         bne    .loop
  160.  
  161.     ;load and save the highscores
  162.         movem.l    (.files),d0/d1        ;starttrack + size
  163.         move.l    #$40000,d2        ;address
  164.         jsr    $6057a            ;loader
  165.         lea    $40000,a0        ;start
  166.         move.l    a0,a1
  167.         add.l    (.files+4),a1        ;end
  168.         lea    $100,a2            ;dest
  169.         jsr    $6078c            ;PP decrunch
  170.         jsr    $100+$8d0        ;load highs
  171.         bsr    _savehighs
  172.  
  173.     ;quit this magic stuff
  174.         bra    _exit
  175.  
  176.     ;table of files
  177. .files        dc.l    $12,$d4e4        ;main exe
  178.         dc.l    $1c,$11964
  179.         dc.l    $28,$c474
  180.         dc.l    $30,$1478
  181.         DC.L    $31,$20BC8
  182.         DC.L    $46,$22FA8
  183.         DC.L    $5C,$1EBC0
  184.         DC.L    $70,$2642C
  185.         DC.L    $89,$20914
  186.     ;    DC.L    $9E            ;end ?
  187.         dc.l    0
  188.  
  189. _version_2    skip    $15e-$152,$60152    ;preserve copperlist
  190.         JSR    $000600f0        ;A6 = _custom !!!
  191.         move.w    #INTF_SETCLR|INTF_INTEN|INTF_PORTS,(intena,a6)
  192.  
  193.     ;load all files from disk and save them
  194.                         ;A6 = $dff000
  195.         lea    (.files),a4        ;A4 file table
  196.         move.l    #$1000,a5        ;A5 address
  197.  
  198. .loop        movem.l    (a4),d0/d1        ;starttrack + size
  199.         move.l    a5,d2            ;address
  200.         movem.l    d5-d7/a4-a5,-(a7)
  201.         jsr    $6057a-$1c        ;loader
  202.         movem.l    (a7)+,d5-d7/a4-a5
  203.         
  204.         movem.l    (a4)+,d0/d2
  205.         bsr    _LongToStr        ;a0 = name
  206.         move.l    d2,d0            ;size
  207.         move.l    a5,a1            ;address
  208.         move.l    (_resload),a2
  209.         jsr    (resload_SaveFile,a2)
  210.         
  211.         tst.l    (a4)
  212.         bne    .loop
  213.  
  214.     ;load and save the highscores
  215.         movem.l    (.files),d0/d1        ;starttrack + size
  216.         move.l    #$40000,d2        ;address
  217.         jsr    $6057a-$1c        ;loader
  218.         lea    $40000,a0        ;start
  219.         move.l    a0,a1
  220.         add.l    (.files+4),a1        ;end
  221.         lea    $100,a2            ;dest
  222.         jsr    $6078c-$1c        ;PP decrunch
  223.         jsr    $100+$8d0        ;load highs
  224.         bsr    _savehighs
  225.  
  226.     ;quit this magic stuff
  227.         bra    _exit
  228.  
  229.     ;table of files
  230. .files        dc.l    $12,$d500        ;main exe
  231.         dc.l    $1c,$11964
  232.         dc.l    $28,$c4f4
  233.         dc.l    $30,$1478        ;loading tfmx
  234.         DC.L    $31,$20BC8        ;level 1
  235.         DC.L    $46,$22FA8        ;level 2
  236.         DC.L    $5C,$1EBC0        ;level 3
  237.         DC.L    $70,$26168        ;level 4
  238.         DC.L    $88,$20914        ;level 5
  239.         dc.l    0
  240.         
  241. ;--------------------------------
  242.  
  243. _disk1        INCBIN    pics/pic_disk1.bin
  244. _wait        INCBIN    pics/pic_waitesc.bin
  245. _colors        INCLUDE    pics/pic_colors.i
  246.         
  247. ;======================================================================
  248.  
  249.     INCLUDE    Sources:whdload/keyboard.s
  250.     INCLUDE    Sources:whdload/picture.s
  251.  
  252. ;======================================================================
  253.  
  254.     ELSE
  255.     
  256. ;======================================================================
  257.  
  258.         move.l    (_resload),a3            ;A3 = resload
  259.  
  260.     ;random area
  261.         lea    $80000,a7
  262.         bsr    _rnd_init
  263.         
  264.     ;check for AmigaFun Version
  265.         lea    _60000,a0
  266.         jsr    (resload_GetFileSize,a3)
  267.         tst.l    d0
  268.         bne    _v1_v2
  269.  
  270.     ;bootblock stuff
  271.         move.l    #$400,d0            ;offset
  272.         move.l    #$18000,d1            ;size
  273.         moveq    #1,d2                ;disk
  274.         lea    $5fe00,a0            ;data
  275.         lea    ($200,a0),a2            ;A2 = 60000
  276.         jsr    (resload_DiskLoad,a3)
  277.  
  278.         patch    $4fa(a2),_load_v3        ;with cache
  279.         patch    $57a(a2),_load_v3        ;plain
  280.         patch    $104(a2),_100_v3
  281.     ;the intro runs on 68030 but not on 68060 (bad compressor)
  282.         skip    6,$36(a2)            ;rainbow arts intro
  283.         jmp    ($8,a2)
  284.  
  285. _100_v3        lea    $603ae,a2            ;orginal
  286.         movem.l    d0-d1/a0-a1,-(a7)
  287.         lea    $100,a0
  288.         patch    $61c(a0),_load_v3        ;with cache
  289.         patch    $696(a0),_load_v3        ;plain
  290.         patch    $8d0(a0),_loadhighs
  291.         patch    $95a(a0),_savehighs
  292.         patchs    $3d0(a0),_p_v3
  293.  
  294.         move.l    a0,a1
  295.         add.l    #112256,a1            ;main size
  296.         bsr    _fb                ;fix bliter waits
  297.  
  298.         movem.l    (a7)+,d0-d1/a0-a1
  299.         jmp    $100
  300.  
  301. _p_v3        jsr    (a0)
  302.         move.l    a0,a2
  303.         bsr    _out
  304.         movem.l    (4,a7),d0-a6
  305.         move.l    (a7)+,a0
  306.         add.w    #15*4,a7
  307.         jmp    (a0)
  308.  
  309. ;--------------------------------
  310. ; d0 = starttrack
  311. ; d1 = size in bytes
  312. ; d2 = dest. address
  313.  
  314. _load_v3    mulu    #$1600,d0        ;offset
  315.         move.l    d2,a0            ;data
  316.         moveq    #1,d2            ;disk
  317.         move.l    (_resload),a2
  318.         jsr    (resload_DiskLoad,a2)
  319.         rts
  320.  
  321. ;--------------------------------
  322.  
  323.     ;enable caches
  324. _v1_v2        move.l    #CACRF_EnableI,d0
  325.         move.l    d0,d1
  326.         jsr    (resload_SetCACR,a3)
  327.  
  328.     ;bootblock stuff
  329.         lea    _60000,a0
  330.         lea    $60000,a1
  331.         move.l    a1,a2
  332.         jsr    (resload_LoadFileDecrunch,a3)
  333.         move.l    d0,d7            ;d7 = size IMPORTANT !!
  334.  
  335.     ;check version
  336.         move.l    a2,a0
  337.         jsr    (resload_CRC16,a3)
  338.         cmp.w    #$5346,d0
  339.         beq    _version_1
  340.         cmp.w    #$59fe,d0
  341.         beq    _version